import store from '@/store'
import router, { resetRouter } from "@/router/index";
import axios from "axios";
import { Message, MessageBox } from "element-ui";
import {clearSession, getLocal} from "@/utils/storage";

const service = axios.create({
	baseURL: process.env.VUE_APP_BASE_API,
	timeout: 50000,
	headers: { "Content-Type": "application/json" }
});

// 添加请求拦截器
service.interceptors.request.use(
	(config) => {
		// 在发送请求之前做些什么 token
		if (getLocal("token")) {
			config.headers.common["Authorization"] = `${getLocal("token")}`;
		}
		return config;
	},
	(error) => {
		// 对请求错误做些什么
		return Promise.reject(error);
	}
);

// 添加响应拦截器
service.interceptors.response.use(
	(response) => {
		// 对响应数据做点什么
		const res = response.data;
		if (res.code && res.code !== 200) {
			return errorInterceptor(res)
		} else {
			return res;
		}
	},
	(error) => {
		//console.log("拦截器 请求返回错误 response",error.response)
		let res = error.response.data;
		// 对响应错误做点什么
		if (error.message.indexOf("timeout") != -1) {
			Message.error("网络超时");
		} else if (error.message == "Network Error") {
			Message.error("网络连接错误");
		}
		return errorInterceptor(res)
	}
);

function errorInterceptor(res){
	// `token` 过期或者账号已在别处登录
	if (res.code === 401 || res.code === 4001) {
		// 清除浏览器全部临时缓存
		clearSession();
		store.commit('emptyMenu')
		MessageBox.alert('登录已过期或被强制下线，请重新登录', '提示', {}).then(() => { }).catch(() => { });
		router.push("/login");
		resetRouter() // 重置路由
	} else {
		Message.error("服务异常："+res.message)
	}
	return Promise.reject(res);
}

export default service;
